package Utils.data;

import Utils.DateTimeUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 数据类型转换
 *
 * @author d11yu
 */
public class DataConverters {
    /**
     * string2Int
     *
     * @param value
     * @return
     */
    public static int string2Int(String value) {
        return Integer.parseInt(value);
    }

    /**
     * string2Double2Int
     *
     * @param value
     * @return
     */
    public static int string2Double2Int(String value) {
        return (int) Double.parseDouble(value);
    }

    /**
     * string2Double
     *
     * @param value
     * @return
     */
    public static double string2Double(String value) {
        return Double.parseDouble(value);
    }

    /**
     * string2UtilDateOrTime
     *
     * @param value  指定的时间，例："2022-3-31"。
     * @param format 指定的时间格式，例"yyyy-MM-dd"或"yyyy-MM-dd HH:mm:ss"。
     * @return
     * @throws ParseException
     */
    public static Date string2UtilDateOrTime(String value, String format) throws ParseException {
        return DateTimeUtils.getDateOrTimeSdfUtil(value, format);
    }

    /**
     * string2UtilDateOrTime
     *
     * @param value 指定的时间，例："2022-3-31"。
     * @param sdf   SimpleDateFormat，指定的时间格式，例"yyyy-MM-dd"或"yyyy-MM-dd HH:mm:ss"。
     * @return
     * @throws ParseException
     */
    public static Date string2UtilDateOrTime(String value, SimpleDateFormat sdf) throws ParseException {
        return DateTimeUtils.getDateOrTimeSdfUtil(value, sdf);
    }

    /**
     * string2SqlDateOrTime
     *
     * @param value  指定的时间，例："2022-3-31"。
     * @param format 指定的时间格式，例"yyyy-MM-dd"或"yyyy-MM-dd HH:mm:ss"。
     * @return
     * @throws ParseException
     */
    public static java.sql.Date string2SqlDateOrTime(String value, String format) throws ParseException {
        return DateTimeUtils.utilDate2SqlDate(DateTimeUtils.getDateOrTimeSdfUtil(value, format));
    }

    /**
     * string2SqlDateOrTime
     *
     * @param value 指定的时间，例："2022-3-31"。
     * @param sdf   SimpleDateFormat，指定的时间格式，例"yyyy-MM-dd"或"yyyy-MM-dd HH:mm:ss"。
     * @return
     * @throws ParseException
     */
    public static java.sql.Date string2SqlDateOrTime(String value, SimpleDateFormat sdf) throws ParseException {
        return DateTimeUtils.utilDate2SqlDate(DateTimeUtils.getDateOrTimeSdfUtil(value, sdf));
    }

    /**
     * double2Int
     *
     * @param value
     * @return
     */
    public static int double2Int(double value) {
        return (int) value;
    }

    /**
     * int2Double
     *
     * @param value
     * @return
     */
    public static double int2Double(int value) {
        return value;
    }

    /**
     * 将字符串转换为整型，如果转换失败，则返回默认值（0）。
     *
     * @param s 待转化字符串
     * @return
     */
    public static int parseInt(String s) {
        return parseInt(s, 0);
    }

    /**
     * 将字符串转换为整型，如果转换失败，则返回默认值。
     *
     * @param s            待转化字符串
     * @param defaultValue 默认值
     * @return
     */
    public static int parseInt(String s, int defaultValue) {
        try {
            return Integer.parseInt(s);
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

    /**
     * 将字符串转换为double，如果转换失败，则返回默认值。
     *
     * @param s            待转化字符串
     * @param defaultValue 默认值
     * @return
     */
    public static double parseDouble(String s, double defaultValue) {
        try {
            return Double.parseDouble(s);
        }catch (NumberFormatException e) {
            return defaultValue;
        }
    }
}
